/*
 * Contains the rules verification and player/player/viewer interfacing.
 * 
 * The Referee is at the center of the package. It created with two chess
 * players (implementing IChessPlayer), and a pipe.
 * 
 * The pipe is used to allow an observer to watch the game.
 * 
 * When the run method is called, the game starts in another thread. It starts
 * the two players. Then it sends the board, and replays the game until it
 * reached the state to restore (note that in the case of a new game, there is
 * no state to restore, so no moves are sent).
 * 
 * Then, the players are called at their turns, the moves they play, and the
 * the events they send are sent trough the pipe.
 * 
 * When the game is over (or a player did a bad move, or disconnected), the end
 * events  are sent trough the pipes, and to the players. Then a REFEREE_EXITING
 * event is sent to notify the pipe readers that the referee is exiting, and
 * the referee exits.
 * 
 * Note that the referee is one use only, you need to build a new one to start
 * a new game.
 * 
 * Note that if you need the referee to exit early, the players must notify him
 * of their disconnection. Else, the referee will continue to wait for them
 * undefinately.
 */
package fr.uvsq.isty.bdh.hchess.interfacing;
